1 module examples.HelloWorld; 2 import phidget21; 3 import std.stdio : writeln, writefln, readln; 4 import std.string : toStringz, fromStringz; 5 6 extern(C) 7 int AttachHandler(CPhidgetHandle device, void* userPtr) { 8 int serialNumber; 9 const char* name; 10 11 LocalErrorCatcher(CPhidget_getDeviceName(device, &name)); 12 LocalErrorCatcher(CPhidget_getSerialNumber(device, &serialNumber)); 13 14 writefln("Hello Device %s, Serial Number: %d", name.fromStringz, serialNumber); 15 16 return 0; 17 } 18 19 extern(C) 20 int DetachHandler(CPhidgetHandle device, void* userPtr) { 21 int serialNumber; 22 const char* name; 23 24 LocalErrorCatcher(CPhidget_getDeviceName(device, &name)); 25 LocalErrorCatcher(CPhidget_getSerialNumber(device, &serialNumber)); 26 27 writefln("Goodbye Device %s, Serial Number: %d", name.fromStringz, serialNumber); 28 return 0; 29 } 30 31 // When using an error handler with the manager, it takes a 32 // CPhidgetManagerHandle, when using an individual object, the 33 // object serves as its own handle. 34 extern(C) 35 int LibraryErrorHandler(CPhidgetManagerHandle device, void* userPtr, int errorCode, const char* errorDescription) { 36 writeln("Error Event: %d - %s", errorCode, errorDescription); 37 return 0; 38 } 39 40 // This error handler can handle any CPhidget function that returns an int 41 extern(C) 42 int LocalErrorCatcher(int errorCode) { 43 const char* errorDescription; 44 45 // If the error code is 0, everything is okay 46 if (errorCode != 0) { 47 // Otherwise, you can print specific messages or perform actions by error value. 48 49 switch(errorCode) { 50 default: 51 writefln("Error: An error occurred with code %d.", errorCode); 52 LocalErrorCatcher(CPhidget_getErrorDescription(errorCode, &errorDescription)); 53 writefln("The description for this error is %s", errorDescription.fromStringz); 54 break; 55 } 56 } 57 58 return 0; 59 } 60 61 void main() { 62 Phidget.load(); 63 64 int result; 65 const char* err; 66 67 CPhidgetManagerHandle device; 68 LocalErrorCatcher(CPhidgetManager_create(&device)); 69 70 LocalErrorCatcher(CPhidgetManager_set_OnAttach_Handler(device, &AttachHandler, null)); 71 LocalErrorCatcher(CPhidgetManager_set_OnDetach_Handler(device, &DetachHandler, null)); 72 LocalErrorCatcher(CPhidgetManager_set_OnError_Handler(device, &LibraryErrorHandler, null)); 73 74 writeln("Opening..."); 75 // Most opening and closing would be via a cast to 76 // (CPhidgetHandle), however, this manager has its 77 // own handle struct to cast to. 78 LocalErrorCatcher(CPhidgetManager_open(device)); 79 80 writeln("Phidget Simple Playground (plug and unplug devices)"); 81 writeln("Press Enter to end anytime..."); 82 readln(); 83 84 writeln("Closing..."); 85 LocalErrorCatcher(CPhidgetManager_close(device)); 86 LocalErrorCatcher(CPhidgetManager_delete(device)); 87 }